home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Think Class Libraries / AE Stuff / CFinderEvent.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-30  |  10.0 KB  |  432 lines  |  [TEXT/KAHL]

  1. /*
  2.  * ---------------------------------------------------------------------
  3.  * CFinderEvent.c :
  4.  *
  5.  * Based on Jon Pugh Finder Event code
  6.  *
  7.  * © Copyright 1992 by F. Menneteau.  All rights reserved.
  8.  * This code can be both distributed and used freely.
  9.  *
  10.  * ---------------------------------------------------------------------
  11.  */
  12.  
  13.  
  14. #include "CFinderEvent.h"
  15.  
  16. #define RETURN(e)        if ( (e) != noErr ) return(itsError)
  17.  
  18.  
  19. /*************************************************************************
  20.  *    METHOD DEFINITIONS
  21.  *************************************************************************/
  22. OSErr CFinderEvent::IFinderEvent(void)
  23. {
  24.     return(BuildTargetWithSignOnly(kFinderSignature)) ;
  25. }
  26.  
  27.  
  28. OSErr CFinderEvent::IRemoteFinderEvent(
  29.     Ptr                TheRemoteMachine)    // 'Finder' name not included
  30. {
  31.     Str255            LcTargetName    ;
  32.  
  33.     if ( TheRemoteMachine == (Ptr) NULL )
  34.         return(AskAndBuildTarget(sTARGET_ID)) ;
  35.  
  36.     pstrcpy((Ptr) LcTargetName,TheRemoteMachine) ;
  37.  
  38.     if ( PSTRLASTCHAR(LcTargetName) != PSTRLASTCHAR(PDELIMITER) )
  39.         pstrcat((Ptr) LcTargetName,PDELIMITER) ;
  40.  
  41.     pstrcat((Ptr) LcTargetName,FINDER) ;
  42.  
  43.     return(BuildTargetWithRemoteName((Ptr) LcTargetName)) ;
  44. }
  45.  
  46.  
  47. OSErr CFinderEvent::privFakeHideEventPutParam(
  48.     OSType            TheCode)
  49. {
  50.     Point            LcPoint    ;
  51.     FinderWindow    LcFWind    ;
  52.     char            LcChar     ;
  53.  
  54.     LcFWind.windowType    = kAEMain    ;
  55.     LcFWind.aliasType    = kFindCode    ;
  56.     LcFWind.aliasLength    = 4            ;
  57.  
  58.     * (OSType *) &LcPoint = TheCode                            ;
  59.     BlockMove(&LcPoint,&(LcFWind.alias),sizeof(LcPoint))    ;
  60.  
  61.     return(protPutParam(
  62.         keyDirectObject,
  63.         typeFinderWindow,
  64.         (Ptr) &LcFWind,
  65.         sizeof(LcFWind))) ;
  66. }
  67.  
  68.  
  69. OSErr CFinderEvent::privWindowPathPutParam(
  70.     Ptr                TheWindowPath,
  71.     WindowType        TheWindowType)
  72. {
  73.     long            LcLength        ;
  74.     FakeFinderWind    LcFFWind        ;
  75.     FSSpec            LcFSSpec        ;
  76.     AliasHandle        LcFolderAlias    ;
  77.     char            LcChar             ;
  78.  
  79.     itsError = EntityPathToAlias(TheWindowPath,typeFOLDER,&LcFolderAlias);
  80.     RETN_IF_ERR(itsError)                                                 ;
  81.  
  82.     HLock((Handle) LcFolderAlias)                                    ;
  83.     LcLength = (**LcFolderAlias).aliasSize - sizeof(AliasRecord)    ;
  84.  
  85.     if ( LcLength >= MAX_ALIAS_SIZE ) {
  86.         itsError = memFullErr    ;    // !!!
  87.         goto CleanExit            ;
  88.     }
  89.  
  90.     LcFFWind.fFinderWindow.windowType    = TheWindowType                    ;
  91.     LcFFWind.fFinderWindow.aliasType    = typeAlias                        ;
  92.     LcFFWind.fFinderWindow.aliasLength    = (**LcFolderAlias).aliasSize    ;
  93.  
  94.     BlockMove(
  95.         (Ptr) *LcFolderAlias,
  96.         &(LcFFWind.fFinderWindow.alias),
  97.         (**LcFolderAlias).aliasSize) ;
  98.  
  99.     (void) protPutParam(
  100.         keyDirectObject,
  101.         typeFinderWindow,
  102.         (Ptr) &(LcFFWind.fFinderWindow),
  103.         sizeof(LcFFWind.fFinderWindow) + LcLength)    ;
  104.  
  105. CleanExit:
  106.     HUnlock((Handle) LcFolderAlias)            ;
  107.     DisposHandle((Handle) LcFolderAlias)    ;
  108.  
  109.     return(itsError) ;
  110. }
  111.  
  112.  
  113. /* --------------------------------------------------------------------- */
  114. /* ALL THE POSSIBLE FINDER EVENTS ARE DESCRIBED BY THE FOLLOWING METHODS */
  115. /* --------------------------------------------------------------------- */
  116. OSErr CFinderEvent::FESendAbout(void)
  117. {
  118.     RETURN(CreateAE(kCoreEventClass,kAEAbout))        ;
  119.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  120. }
  121.  
  122.  
  123. OSErr CFinderEvent::FESendAliasSelection(
  124.     Ptr    TheFolderPath,
  125.     Ptr    TheItemList)
  126. {
  127.     RETURN(CreateAE(kCoreEventClass,kAEAliasSelection))            ;
  128.     RETURN(protFolderPathPutParam(TheFolderPath))                ;
  129.     RETURN(protFilesListPutParam(TheFolderPath,TheItemList))    ;
  130.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  131. }
  132.  
  133.  
  134. OSErr CFinderEvent::FESendCloseAbout(void)
  135. {
  136.     /*
  137.      *    "This is a fake event that close the About window. This performs
  138.      *    some black magic that it is very ugly" dixit Jon Pugh.
  139.      */
  140.     RETURN(CreateAE(kAEFinderEvents,kAEClose))        ;
  141.     RETURN(privFakeHideEventPutParam(kAboutCode))    ;
  142.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  143. }
  144.  
  145.  
  146. OSErr CFinderEvent::FESendCloseWindow(
  147.     Ptr            TheWindowPath,
  148.     WindowType    TheWindowType)
  149. {
  150.     RETURN(CreateAE(kAEFinderEvents,kAEClose))                    ;
  151.     RETURN(privWindowPathPutParam(TheWindowPath,TheWindowType))    ;
  152.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  153. }
  154.  
  155.  
  156. OSErr CFinderEvent::FESendDragSelection(
  157.     Ptr        TheDestinationFolder,
  158.     Ptr        TheItemPathList,
  159.     short    TheHPos,
  160.     short    TheVPos)
  161. {
  162.     Point    LcPoint    ;
  163.  
  164.     RETURN(CreateAE(kAEFinderEvents,kAEDrag))                    ;
  165.     RETURN(protFolderPathPutParam(TheDestinationFolder))        ;
  166.     RETURN(protFilesListPutParam((Ptr) NULL,TheItemPathList))    ;
  167.  
  168.     LcPoint.h = TheHPos ;
  169.     LcPoint.v = TheVPos ;
  170.  
  171.     RETURN(protPutParam(
  172.         keyMiscellaneous,
  173.         typeLongInteger,
  174.         (Ptr) &LcPoint,
  175.         sizeof(LcPoint))) ;
  176.  
  177.     return(SendAE(kAENeverInteract | kAENoReply/*kAEWaitReply*/))    ;
  178. }
  179.  
  180.  
  181. OSErr CFinderEvent::FESendDuplicateSelection(
  182.     Ptr        TheFolderPath,
  183.     Ptr        TheItemList)
  184. {
  185.     RETURN(CreateAE(kAEFinderEvents,kAEDuplicateSelection))        ;
  186.     RETURN(protFolderPathPutParam(TheFolderPath))                ;
  187.     RETURN(protFilesListPutParam(TheFolderPath,TheItemList))    ;
  188.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  189. }
  190.  
  191.  
  192. OSErr CFinderEvent::FESendEmptyTrash(void)
  193. {
  194.     RETURN(CreateAE(kAEFinderEvents,kAEEmptyTrash))    ;
  195.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  196. }
  197.  
  198.  
  199. OSErr CFinderEvent::FESendGetInfo(
  200.     Ptr        TheFolderPath,
  201.     Ptr        TheItemList)
  202. {
  203.     RETURN(CreateAE(kAEFinderEvents,kAEGetInfoSelection))        ;
  204.     RETURN(protFolderPathPutParam(TheFolderPath))                ;
  205.     RETURN(protFilesListPutParam(TheFolderPath,TheItemList))    ;
  206.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  207. }
  208.  
  209.  
  210. OSErr CFinderEvent::FESendHideClipboard(void)
  211. {
  212.     /*
  213.      *    "This is a fake event that close the Clipboard window. This
  214.      *    performs some black magic that it is very ugly" dixit Jon Pugh.
  215.      */
  216.     RETURN(CreateAE(kAEFinderEvents,kAEClose))        ;
  217.     privFakeHideEventPutParam(kClipCode)            ;
  218.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  219. }
  220.  
  221.  
  222. OSErr CFinderEvent::FESendMoveSelection(
  223.     Ptr        TheDestinationFolder,
  224.     Ptr        TheItemPathList,
  225.     short    TheHPos,
  226.     short    TheVPos)
  227. {
  228.     Point    LcPoint    ;
  229.  
  230.     RETURN(CreateAE(kAEFinderEvents,kAEMove))                    ;
  231.     RETURN(protFolderPathPutParam(TheDestinationFolder))        ;
  232.     RETURN(protFilesListPutParam((Ptr) NULL,TheItemPathList))    ;
  233.  
  234.     LcPoint.h = TheHPos ;
  235.     LcPoint.v = TheVPos ;
  236.     
  237.     RETURN(protPutParam(
  238.         keyMiscellaneous,
  239.         typeLongInteger,
  240.         (Ptr) &LcPoint,
  241.         sizeof(LcPoint))) ;
  242.  
  243.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  244. }
  245.  
  246.  
  247. OSErr CFinderEvent::FESendMoveWindow(
  248.     Ptr        TheWindowPath,
  249.     short    TheHPos,
  250.     short    TheVPos)
  251. {
  252.     Point    LcPoint    ;
  253.  
  254.     RETURN(CreateAE(kAEFinderEvents,kAESetPosition))        ;
  255.     RETURN(privWindowPathPutParam(TheWindowPath,kAEMain))    ;
  256.  
  257.     LcPoint.h = TheHPos ;
  258.     LcPoint.v = TheVPos ;
  259.     
  260.     RETURN(protPutParam(
  261.         keyMiscellaneous,
  262.         typeLongInteger,
  263.         (Ptr) &LcPoint,
  264.         sizeof(LcPoint))) ;
  265.  
  266.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  267. }
  268.  
  269.  
  270. OSErr CFinderEvent::FESendOpenSelection(
  271.     Ptr        TheFolderPath,
  272.     Ptr        TheItemList)
  273. {
  274.     RETURN(CreateAE(kAEFinderEvents,kAEOpenSelection))            ;
  275.     RETURN(protFolderPathPutParam(TheFolderPath))                ;
  276.     RETURN(protFilesListPutParam(TheFolderPath,TheItemList))    ;
  277.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  278. }
  279.  
  280.  
  281. OSErr CFinderEvent::FESendPageSetup(
  282.     Ptr TheWindowPath)
  283. {
  284.     RETURN(CreateAE(kAEFinderEvents,kAEPageSetup))            ;
  285.     RETURN(privWindowPathPutParam(TheWindowPath,kAEMain))    ;
  286.     return(SendAE(kAENeverInteract | kAENoReply))            ;
  287. }
  288.  
  289.  
  290. OSErr CFinderEvent::FESendPrintSelection(
  291.     Ptr        TheFolderPath,
  292.     Ptr        TheItemList)
  293. {
  294.     RETURN(CreateAE(kAEFinderEvents,kAEPrintSelection))            ;
  295.     RETURN(protFolderPathPutParam(TheFolderPath))                ;
  296.     RETURN(protFilesListPutParam(TheFolderPath,TheItemList))    ;
  297.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  298. }
  299.  
  300.  
  301. OSErr CFinderEvent::FESendPrintWindow(
  302.     Ptr        TheWindowPath)
  303. {
  304.     RETURN(CreateAE(kAEFinderEvents,kAEPrintWindow))        ;
  305.     RETURN(privWindowPathPutParam(TheWindowPath,kAEMain))    ;
  306.     return(SendAE(kAENeverInteract | kAENoReply))            ;
  307. }
  308.  
  309.  
  310. OSErr CFinderEvent::FESendPutAway(
  311.     Ptr        TheFolderPath,
  312.     Ptr        TheItemList)
  313. {
  314.     RETURN(CreateAE(kAEFinderEvents,kAEPutAwaySelection))        ;
  315.     RETURN(protFolderPathPutParam(TheFolderPath))                ;
  316.     RETURN(protFilesListPutParam(TheFolderPath,TheItemList))    ;
  317.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  318. }
  319.  
  320.  
  321. OSErr CFinderEvent::FESendResizeWindow(
  322.     Ptr        TheWindowPath,
  323.     short    TheHeight,
  324.     short    TheWidth)
  325. {
  326.     Point    LcPoint    ;
  327.  
  328.     RETURN(CreateAE(kAEFinderEvents,kAEGrow))                ;
  329.     RETURN(privWindowPathPutParam(TheWindowPath,kAEMain))    ;
  330.  
  331.     LcPoint.h = TheHeight ;
  332.     LcPoint.v = TheWidth ;
  333.     
  334.     RETURN(protPutParam(
  335.         keyMiscellaneous,
  336.         typeLongInteger,
  337.         (Ptr) &LcPoint,
  338.         sizeof(LcPoint))) ;
  339.  
  340.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  341. }
  342.  
  343.  
  344. OSErr CFinderEvent::FESendRestart(void)
  345. {
  346.     RETURN(CreateAE(kAEFinderEvents,kAERestart))    ;
  347.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  348. }
  349.  
  350.  
  351. OSErr CFinderEvent::FESendRevealSelection(
  352.     Ptr        TheFolderPath,
  353.     Ptr        TheItemList)
  354. {
  355.     RETURN(CreateAE(kAEFinderEvents,kAERevealSelection))        ;
  356.     RETURN(protFolderPathPutParam(TheFolderPath))                ;
  357.     RETURN(protFilesListPutParam(TheFolderPath,TheItemList))    ;
  358.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  359. }
  360.  
  361.  
  362. OSErr CFinderEvent::FESendSetView(
  363.     Ptr                TheWindowPath,
  364.     TypeWindowView    TheWindowView)
  365. {
  366.     long    LcLong = (long) TheWindowView ;
  367.  
  368.     RETURN(CreateAE(kAEFinderEvents,kAEChangeView))            ;
  369.     RETURN(privWindowPathPutParam(TheWindowPath,kAEMain))    ;
  370.  
  371.     RETURN(protPutParam(
  372.         keyMiscellaneous,
  373.         typeLongInteger,
  374.         (Ptr) &LcLong,
  375.         sizeof(LcLong))) ;
  376.  
  377.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  378. }
  379.  
  380.  
  381. OSErr CFinderEvent::FESendSharing(
  382.     Ptr        TheParentPath,
  383.     Ptr        TheFolderList)
  384. {
  385.     RETURN(CreateAE(kAEFinderEvents,kAESharing))                ;
  386.     RETURN(protFolderPathPutParam(TheParentPath))                ;
  387.     RETURN(protFilesListPutParam(TheParentPath,TheFolderList))    ;
  388.     return(SendAE(kAENeverInteract | kAENoReply))                ;
  389. }
  390.  
  391.  
  392. OSErr CFinderEvent::FESendShowClipboard(void)
  393. {
  394.     RETURN(CreateAE(kAEFinderEvents,kAEShowClipboard))    ;
  395.     return(SendAE(kAENeverInteract | kAENoReply))        ;
  396. }
  397.  
  398.  
  399. OSErr CFinderEvent::FESendShutDown(void)
  400. {
  401.     RETURN(CreateAE(kAEFinderEvents,kAEShutDown))    ;
  402.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  403. }
  404.  
  405.  
  406. OSErr CFinderEvent::FESendSleep(void)
  407. {
  408.     RETURN(CreateAE(kAEFinderEvents,kAESleep))        ;
  409.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  410. }
  411.  
  412.  
  413. OSErr CFinderEvent::FESendZoomWindow(
  414.     Ptr                TheWindowPath,
  415.     TypeWindowZoom    TheWindowZoom)
  416. {
  417.     long    LcLong = (long) TheWindowZoom ;
  418.  
  419.     RETURN(CreateAE(kAEFinderEvents,kAEZoom))                ;
  420.     RETURN(privWindowPathPutParam(TheWindowPath,kAEMain))    ;
  421.  
  422.     RETURN(protPutParam(
  423.         keyMiscellaneous,
  424.         typeLongInteger,
  425.         (Ptr) &LcLong,
  426.         sizeof(LcLong))) ;
  427.  
  428.     return(SendAE(kAENeverInteract | kAENoReply))    ;
  429. }
  430.  
  431.  
  432.